package com.rc.web.converter;

import com.rc.pojo.dto.farm.UpdateFarmDTO;
import com.rc.pojo.po.Farm;
import com.rc.pojo.vo.farm.FarmDetailVO;
import com.rc.pojo.vo.farm.FarmVO;
import com.rc.pojo.vo.farm.PoiFarmVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
 * 农场信息转换器
 * 使用MapStruct实现DTO、PO、VO之间的转换
 */
@Mapper(componentModel = "spring") // 声明为Spring组件
public interface FarmConverter {

    /**
     * 将农场PO转换为详情VO
     * @param farm 农场持久化对象
     * @return 农场详情视图对象
     */
    FarmDetailVO toDetail(Farm farm);

    /**
     * 将农场PO转换为VO
     * @param farm 农场持久化对象
     * @return 农场视图对象
     */
    FarmVO toVO(Farm farm);

    /**
     * 将更新DTO转换为PO
     * @param dto 农场更新数据传输对象
     * @return 农场持久化对象
     */
    Farm updateDTO2PO(UpdateFarmDTO dto);

    /**
     * 将农场PO转换为POI VO
     * @param farm 农场持久化对象
     * @return POI视图对象
     */
    @Mapping(target = "title",source = "name") // 将农场名称映射到标题
    @Mapping(target = "cover",expression = "java(farm.getImgs().stream().findFirst().orElse(null))") // 获取第一张图片作为封面
    PoiFarmVO toPoi(Farm farm);
}
